Computer systems typically include a processor, main memory and secondary storage memory. The processor is, for example, a central processing unit (CPU) or a microprocessor. The main memory is normally random access memory (RAM), and the secondary storage is typically a hard disk drive. When the processor wants to make use of data stored in the secondary storage memory, the data is moved from the hard disk drive into the main memory. Normally, the data would be moved from the hard disk drive into the main memory in units of blocks. Because the transferring of blocks of data in this manner to and from the hard disk drive and the main memory is time consuming, computer systems have used a Direct Memory Access (DMA) disk controller to oversee the transferring of data. Typically, the DMA disk controller receives information from the processor indicating a base address from where bytes are to be moved, an address to where these bytes should be placed, and the number of bytes to be moved. The DMA disk controller is then able to monitor and oversee the transferring of the data, thus freeing the processor to perform other processing tasks.
Some computer systems use a series of secondary storage devices such as a Redundant Array of Inexpensive Disks (RAID) to store data. With a RAID design, a RAID controller instructs a DMA disk controller to transfer data between a local memory location and a disk location. The DMA disk controller establishes a direct data path between the local memory and the disk array, allowing the RAID controller central processing unit (CPU) to perform other tasks while the data exchange occurs in parallel.
Conventional DMA disk controllers are capable of transferring data between one or more memory locations and a contiguous region of a disk drive. Specifically, a DMA disk controller is capable of “gathering” data from noncontiguous memory locations according to a “gather list” provided by a RAID controller and writing the collected data to a single contiguous region of a single disk drive. In addition, the DMA disk controller is capable of reading data from a single contiguous region of a single disk drive and “scattering” this data over non-contiguous memory locations according to a “scatter list” provided by the RAID controller.
Some RAID operations involve data transfers between multiple memory locations and multiple distinct disk locations. Currently, no mechanism exists for performing such data transfers in an efficient way. In particular, a RAID controller has to issue a separate command for each distinct disk location involved in the required data transfer. For example, in order to destage a RAID-5 strip containing ‘N’ number of data chunks (i.e., components that form a RAID stripe) and a parity data chunk, the RAID controller must issue a total of N+1 distinct write commands to the DMA disk controller. Furthermore, because there is a possibility that any of these write commands can fail or be interleaved with other operations, the RAID controller has to take additional upper-level precautions to monitor the execution of these write commands and ensure that the related data transfers appear atomic to the system.